from pathlib import Path
from gooey import Gooey, GooeyParser
import sys

sys.path.append(".")

progress = "progress:"


@Gooey(progress_regex=rf"^{progress}(\d+)", hide_progress_msg=True)
def main():
    parser = GooeyParser()
    sub_parser = parser.add_subparsers(dest="cmd")
    create_frame_gssd(sub_parser.add_parser("datasets"))
    split_frames(sub_parser.add_parser("frames"))

    args = parser.parse_args()

    if args.cmd == "frames":
        from inner_utils import chai_fen_shi_pin

        if args.skip_frames <= 0:
            chai_fen_shi_pin.do_split(Path(args.src), Path(args.dst), progress)
        else:
            chai_fen_shi_pin.do_split_with_skip_frame(
                Path(args.src),
                Path(args.dst),
                Path(args.gt_folder),
                args.skip_frames,
                progress,
            )
    elif args.cmd == "datasets":
        from inner_utils import create_datasets

        create_datasets.do_create(Path(args.src), Path(args.dst))


def create_frame_gssd(parser: GooeyParser):
    """
    - src: 输入的文件，支持csv等文本表格数据，请以","分割
    - dst: 输出文件夹

    Args:
        parser (GooeyParser): _description_
    """
    parser.add_argument(
        "src",
        help="输入的文件，支持csv等文本表格数据，请以','分割",
        type=str,
        widget="FileChooser",
    )
    parser.add_argument("dst", help="输出文件夹", type=str, widget="DirChooser")


def split_frames(parser: GooeyParser):
    """
    - src: 输入视频，支持avi，mp4，mkv等格式视频文件
    - dst: 输出文件夹
    - skip_frames: 每隔几帧生成一次图片
    - gt_folder(OPT): 标签文件夹，要求为每一帧对应的txt文件

    Args:
        parser (GooeyParser): _description_
    """
    parser.add_argument(
        "src",
        help="输入视频，支持avi，mp4，mkv等格式视频文件",
        type=str,
        widget="FileChooser",
    )

    parser.add_argument("dst", help="输出文件夹", type=str, widget="DirChooser")

    parser.add_argument("skip_frames", help="每隔几帧生成一次图片", type=int, default=0)

    parser.add_argument(
        "--gt_folder",
        help="标签文件夹，要求为每一帧对应的txt文件",
        type=str,
        widget="DirChooser",
    )


if __name__ == "__main__":
    main()
